﻿using System;
using ContractManager.Common.Class;

namespace ContractManager.UserControls.Controls
{
    public partial class UcDateRangedVertical : DevExpress.XtraEditors.XtraUserControl
    {

        #region "Define Variable"
        private int _year;
        private int _weekMonth;
        private int _selectIndex;
        private DateTime _dtNow;
        private DateTime _dtChoise;
        private DateTime _fromDate;
        private DateTime _toDate;
        private string _kyBc;
        private string _lciKyBc;
        #endregion

        #region "Public properties"
        public int Year
        {
            get
            {
                return _year;
            }
            set
            {
                _year = value;
            }
        }

        public int SelectIndex
        {
            get
            {
                return _selectIndex;
            }
            set
            {
                _selectIndex = value;
                txtKyBC.SelectedIndex = _selectIndex;
            }
        }

        public string KyBc
        {
            get
            {
                return _kyBc;
            }
            set
            {
                _kyBc = value;
            }
        }

        public DateTime FromDate
        {
            get
            {
                _fromDate = txtFromDate.DateTime;
                return _fromDate;
            }
            set
            {
                _fromDate = value;
            }
        }

        public DateTime ToDate
        {
            get
            {
                _toDate = txtToDate.DateTime;
                return _toDate;
            }
            set
            {
                _toDate = value;
            }
        }

        public string LiKyBc
        {
            get
            {
                return _lciKyBc;
            }
            set
            {
                _lciKyBc = value;
                if (!String.IsNullOrEmpty(_lciKyBc) && _lciKyBc.Length>0)
                {
                    lciKyBC.Text = _lciKyBc;
                }
            }
        }
        #endregion

        #region "Construction"
        public UcDateRangedVertical()
        {
            InitializeComponent();
        }
        #endregion

        #region "Control Event"
        private void TxtKyBcSelectedIndexChanged(object sender, EventArgs e)
        {
            if (_year < 1945) return;
            _dtNow = new DateTime(_year, DateTime.Now.Month, DateTime.Now.Day);
            txtFromDate.Enabled = txtToDate.Enabled = false;
            switch (txtKyBC.SelectedIndex)
            {
                case 0://Hôm nay
                    _fromDate = _toDate = _dtNow;
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Ngày {0} tháng {1} năm {2}", _fromDate.Day, _fromDate.Month, _year);

                    break;
                case 1://Tuần này
                    _fromDate = ClsDateUtils.WeekBegin(_dtNow);
                    _toDate = ClsDateUtils.WeekEnd(_dtNow);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = _dtNow.GetWeekNumber();
                    _kyBc = String.Format("Tuần thứ {0} năm {1}", _weekMonth, _year);
                    break;
                case 2://Đầu tuần đến hiện tại
                    _fromDate = ClsDateUtils.WeekBegin(_dtNow);
                    _toDate = _dtNow;
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Từ ngày {0} dến ngày {1}", _fromDate.ToString("dd/MM/yyyy"), _toDate.ToString("dd/MM/yyyy"));
                    break;
                case 3://Tháng này
                    _fromDate = ClsDateUtils.MonthBegin(_dtNow);
                    _toDate = ClsDateUtils.MonthEnd(_dtNow);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = ClsDateUtils.Month();
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 4://Đầu tháng đến hiện tại
                    _fromDate = ClsDateUtils.MonthBegin(_dtNow);
                    _toDate = _dtNow;
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Từ ngày {0} dến ngày {1}", _fromDate.ToString("dd/MM/yyyy"), _toDate.ToString("dd/MM/yyyy"));
                    break;
                case 5://Quý này
                    _fromDate = ClsDateUtils.QuarterBegin(_dtNow);
                    _toDate = ClsDateUtils.QuarterEnd(_dtNow);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = ClsDateUtils.Quarter();
                    _kyBc = String.Format("Quý {0} năm {1}", _weekMonth, _year);
                    break;
                case 6://Đầu quý đến hiện tại
                    _fromDate = ClsDateUtils.QuarterBegin(_dtNow);
                    _toDate = _dtNow;
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Từ ngày {0} dến ngày {1}", _fromDate.ToString("dd/MM/yyyy"), _toDate.ToString("dd/MM/yyyy"));
                    break;
                case 7://Năm nay
                    _fromDate = ClsDateUtils.YearBegin(_dtNow);
                    _toDate = ClsDateUtils.YearEnd(_dtNow);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Năm {0}", _year);
                    break;
                case 8://Đầu năm đến hiện tại
                    _fromDate = ClsDateUtils.YearBegin(_dtNow);
                    _toDate = _dtNow;
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Từ ngày {0} dến ngày {1}", _fromDate.ToString("dd/MM/yyyy"), _toDate.ToString("dd/MM/yyyy"));
                    break;
                case 9://Tháng 1
                    _dtChoise = new DateTime(_year, 1, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 10://Tháng 2
                    _dtChoise = new DateTime(_year, 2, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 11://Tháng 3
                    _dtChoise = new DateTime(_year, 3, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 12://Tháng 4
                    _dtChoise = new DateTime(_year, 4, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 13://Tháng 5
                    _dtChoise = new DateTime(_year, 5, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 14://Tháng 6
                    _dtChoise = new DateTime(_year, 6, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 15://Tháng 7
                    _dtChoise = new DateTime(_year, 7, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 16://Tháng 8
                    _dtChoise = new DateTime(_year, 8, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 17://Tháng 9
                    _dtChoise = new DateTime(_year, 9, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 18://Tháng 10
                    _dtChoise = new DateTime(_year, 10, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 19://Tháng 11
                    _dtChoise = new DateTime(_year, 11, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 20://Tháng 12
                    _dtChoise = new DateTime(_year, 12, 1);
                    _fromDate = ClsDateUtils.MonthBegin(_dtChoise);
                    _toDate = ClsDateUtils.MonthEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 8;
                    _kyBc = String.Format("Tháng {0} năm {1}", _weekMonth, _year);
                    break;
                case 21://Quý I
                    _dtChoise = new DateTime(_year, 3, 15);
                    _fromDate = ClsDateUtils.QuarterBegin(_dtChoise);
                    _toDate = ClsDateUtils.QuarterEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 20;
                    _kyBc = String.Format("Quý {0} năm {1}", _weekMonth, _year);
                    break;
                case 22://Quý II
                    _dtChoise = new DateTime(_year, 6, 15);
                    _fromDate = ClsDateUtils.QuarterBegin(_dtChoise);
                    _toDate = ClsDateUtils.QuarterEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 20;
                    _kyBc = String.Format("Quý {0} năm {1}", _weekMonth, _year);
                    break;
                case 23://Quý III
                    _dtChoise = new DateTime(_year, 9, 15);
                    _fromDate = ClsDateUtils.QuarterBegin(_dtChoise);
                    _toDate = ClsDateUtils.QuarterEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 20;
                    _kyBc = String.Format("Quý {0} năm {1}", _weekMonth, _year);
                    break;
                case 24://Quý IV
                    _dtChoise = new DateTime(_year, 12, 31);
                    _fromDate = ClsDateUtils.QuarterBegin(_dtChoise);
                    _toDate = ClsDateUtils.QuarterEnd(_dtChoise);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _weekMonth = txtKyBC.SelectedIndex - 20;
                    _kyBc = String.Format("Quý {0} năm {1}", _weekMonth, _year);
                    break;
                default://Tự chọn
                    txtFromDate.Enabled = txtToDate.Enabled = true;
                    _fromDate = ClsDateUtils.MonthBegin(_dtNow);
                    _toDate = ClsDateUtils.MonthEnd(_dtNow);
                    txtFromDate.DateTime = _fromDate;
                    txtToDate.DateTime = _toDate;
                    _kyBc = String.Format("Từ ngày {0} dến ngày {1}", _fromDate.ToString("dd/MM/yyyy"), _toDate.ToString("dd/MM/yyyy"));
                    break;
            }
        }
        #endregion

        #region "Control Date Event"
        private void TxtFromDateEditValueChanged(object sender, EventArgs e)
        {
            _kyBc = String.Format("Từ ngày {0} dến ngày {1}", txtFromDate.DateTime.ToString("dd/MM/yyyy"), txtToDate.DateTime.ToString("dd/MM/yyyy"));
        }

        private void TxtToDateEditValueChanged(object sender, EventArgs e)
        {
            _kyBc = String.Format("Từ ngày {0} dến ngày {1}", txtFromDate.DateTime.ToString("dd/MM/yyyy"), txtToDate.DateTime.ToString("dd/MM/yyyy"));
        }
        #endregion

    }
}
